package com.fanxuankai.commons.util;

import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil;

import java.io.File;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 文件工具类
 *
 * @author fanxuankai
 */
public class FileUtils extends FileUtil {
    /**
     * 文本内容转小写
     *
     * @param sourceDir 源目录
     * @param targetDir 目标目录
     * @param mimeTypes 文件类型
     */
    public static void lowerCase(String sourceDir, String targetDir, List<String> mimeTypes) {
        caseFormat(sourceDir, targetDir, mimeTypes, String::toLowerCase);
    }

    /**
     * 文本内容转大写
     *
     * @param sourceDir 源目录
     * @param targetDir 目标目录
     * @param mimeTypes 文件类型
     */
    public static void upperCase(String sourceDir, String targetDir, List<String> mimeTypes) {
        caseFormat(sourceDir, targetDir, mimeTypes, String::toUpperCase);
    }

    private static void caseFormat(String sourceDir, String targetDir, List<String> mimeTypes,
                                   Function<String, String> mapper) {
        File[] ls = ls(sourceDir);
        if (ls == null) {
            return;
        }
        Arrays.stream(ls)
                .filter(File::isFile)
                .filter(file -> mimeTypes.contains(FileTypeUtil.getType(file)))
                .forEach(file -> writeLines(readLines(file, Charset.defaultCharset()).stream()
                                .map(mapper).collect(Collectors.toList()),
                        new File(targetDir, file.getName()),
                        Charset.defaultCharset()));
    }
}
